<?php

/**
 * Acciones relacionadas a las operaciones con el carrito de compras.
 *
 * @author     Carlo Lopez
 */
class carritoActions extends sfActions
{

  /*
   * Registra un nuevo usuario
   */
  public function executeRegistrar(sfWebRequest $request)
  {
      
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
    $currentdir = getcwd();
    chdir(sfConfig::get('sf_root_dir'));
    $task = new sfGuardCreateUserTask($this->dispatcher, new sfFormatter());
    $args = $request->getParameterHolder()->getAll();
    unset($args['_csrf_token']);
    unset($args['module']);
    unset($args['action']);
    unset($args['password_confirm']);
    $opts = array();
    $opts['is_super_admin'] = false;
    $returnCode = $task->run($args, $opts);
    chdir($currentdir);
    sfContext::switchTo('ShoppingCartFront');
  }

  public function executeFormregistro(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
    $this->form = new RegistroForm();
  }

  public function executePruebaregistrar(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
    $this->contenido = $request->getParameterHolder()->getAll();
  }

  public function executePrueba(sfWebRequest $request)
  {
    //$this->colection = Doctrine_Core::getTable('Producto')->findAll();

    /*
    $this->namespaces = $this->getUser()->getAttributeHolder()->getNamespaces();
    $this->usuario = $this->namespaces[1];
    $this->clase = get_class($this->getUser());
    

    $clientid = 1;
    $prodid = 1;
    $q = Doctrine_Query::create()
        ->select('e.* , o.*')
        ->from('EntregaMyaltarget e')
        //->where('o.cliente_id = ?', $clientid);
        ->innerJoin('e.Orden o WITH o.cliente_id = ?', $clientid)
        ->where('o.despacho_inmediato = ?', true);
////        ->andWhere('e.entregado = ?', false);
        //->orderby('o.fecha_despacho DESC');

      $this->resultados = $q->fetchArray();
    */

      //$this->fecha = Doctrine_Core::getTable('Afiliacion')->getFechaProximoPago(1,1);
    $this->plan_ma = Doctrine_Core::getTable('TbcPlan')->findOneByPlanMens('S');
  }

  /**
   * Se calcula cotizacion de un producto cuyo precio haya sido consultado.
   */
  public function executeCotizar(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
    $params = $request->getParameterHolder()->getAll();
    $class = ucfirst(strtolower($params['pricing']['producto'])) . 'PricingRequestForm';
    if(class_exists($class))
    {
      $this->envio = new EnvioForm();
      $this->form = new $class();
      $this->processForm($request, $this->form);

      if($this->form->isValid()) return;
      $this->setTemplate('consultar', $this->form->getNombreProd());
    }
    else
      throw new Exception('No existe la clase ' . $class);
  }

  /* Agrega un paquete de producto al carrito. Un paquete
   *  de producto se refiere a un producto junto a la descripcion
   *  de beneficios que de este se ofreceran.
   */
//  public function executeAgregar(sfWebRequest $request)
//  {
//    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
//    /*para informar al layout de la posicion en el sitio
//    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
//    $this->getUser()->setAttribute("tab_actual", "carrito");
//    */
//      
//    if( $request->hasParameter('email') )
//      $this->forward('carrito','email');
//
//    $params = $request->getParameterHolder()->getAll();
//    $paquete = new Paquete($params['producto'], $this->getReglas($request), $params['frecuencia']);
//
//    if( $this->getUser()->getGuardUser()->Cliente->exists() && 
//        null != Doctrine_Core::getTable('Afiliacion')
//                 ->findOneByClienteIdAndProductoId($this->getUser()->getGuardUser()->Cliente->getPrimaryKey(),
//                                                     $paquete->getProducto()->getPrimaryKey()))
//    {
//      //$carrito->addPaquete($paquete, Paquete::REPETIDO);
//      $paquete->setStatus(Paquete::REPETIDO);
//    }
//    /* TODO: aqui hay un error, hace falta poner el nombre del usuario...
//     * obviamente ningun usuario tiene un atributo 'carrito'
//     */
//    if(!$this->getUser()->hasAttribute('carrito'))
//    {
//
//      $carrito = new Carrito();
//      //coloca el carrito en los cookies
//      $this->getUser()->setAttribute($this->getUser()->getUsername() . 'carrito',$carrito);
//      
//    }
//
//    $this->getUser()->getAttribute($this->getUser()->getUsername() . 'carrito')->addPaquete($paquete);
//    
//    $this->redirect('carrito/contenido');
//  }
  
  /**
   * Permite agregar un paquete de servicios al carrito de compras, bien sea
   * a traves de un plan de los predefinidos por la empresa, o por un paquete
   * personalizado que seleccione el cliente.
   * 
   * @param sfWebRequest $request 
   */
  public function executeAgregar(sfWebRequest $request) 
  {
      
      $this->forward404Unless($request->hasParameter("plan"), "El plan no ha sido especificado");
      $this->forward404Unless($request->hasParameter("frec"), "La frecuencia de pagos no se ha especificado");
      $plan = Doctrine_Core::getTable('Plan')->find($request->getParameter("plan"));
      $frec = Doctrine_Core::getTable('Frecuencia')->find($request->getParameter("frec"));
      
      $paquete = new Paquete();
      $paquete->fromPlan($plan, $frec->id);
      
      $nombreuser = $this->getUser()->getUsername();
      $carrito = null;
      if(!$this->getUser()->hasAttribute($nomreuser.'carrito'))
      {
          $carrito = new Carrito();
          $this->getUser()->setAttribute($nombreuser . 'carrito',$carrito);
      }
      $carrito = $this->getUser()->getAttribute($nombreuser . 'carrito');
      $carrito->addPaquete($paquete);
      
      $this->redirect('carrito/contenido', "302");
      
  }



  public function executeUpdate(sfWebRequest $request)
  {
    // 1) carga los valores del producto

    // 2) se redirige a la consulta con las opciones seleccionadas
  }

  /** 
   * Muestra el contenido del carrito.
   */
  public function executeContenido(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */ 
      
    $nom = $this->getUser()->getUsername();

    if($this->getUser()->hasAttribute($nom . 'carrito'))
      $this->paquetes = $this->getUser()->getAttribute($nom . 'carrito')->getPaquetes();
  }

  /**
   * Solicita el pago de los productos que se encuentran 
   * dentro del carrito.
   */
  public function executeCheckout(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
      
    $nom = $this->getUser()->getUsername();
    if(!$this->getUser()->hasAttribute($nom . 'carrito'))
      $this->forward404('No existen productos que haya agregado al carrito');  

    $this->paquetes = $this->getUser()->getAttribute($nom . 'carrito')->getPaquetes();
    $this->pagoform = new PagoForm();
    if( $request->isMethod(sfRequest::POST) ) 
    {
      $this->pagoform->bind($request->getParameter($this->pagoform->getName()), $request->getFiles($this->pagoform->getName()));
      if($this->pagoform->isValid())
      {
        /* almacena el pago solo en caso de que la solicitud de cobro se pueda satisfacer
           TODO: revisar si esto se puede hacer de manera que el codigo quede mas explicito.
            Algo como:
           $this->pagoform->setPaquetes($this->paquetes, $this->getUser()->getGuardUser());
           $this->pagoform->save();
 
       */

        //TODO: esta linea que sigue deberia estar envuelta en un try{ } y el catch redirigir a una pagina
        //      que explica el fallo de la operacion.
        $this->pagoform->solicitarPaquetes($this->paquetes, 
                                           $this->getUser());

        $this->getUser()->getAttribute($this->getUser()
                                            ->getUsername() . 'carrito')
                                            ->setPago($this->pagoform->getObject());
        $this->forward('carrito', 'confirmar');

      }
    }
  }

  /**
   * Se ha almacenado la informacion de pago y se solicita confirmacion
   * de la operacion de compra.
   */
  public function executeConfirmar(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
      
    $nom = $this->getUser()->getUsername();
    if($this->getUser()->hasAttribute($nom . 'carrito'))
    { 
       $carrito = $this->getUser()->getAttribute($nom . 'carrito');
       if($carrito->isEmpty() || !$carrito->hasPago() )
          $this->forward('vitrina', 'index');

      $this->paquetes = $carrito->getPaquetes();
      $this->pago = $carrito->getPago();
    }
    else
      $this->forward('vitrina', 'index');
    
  }

  /**
   * Se anula el pago introducido. A esta accion se llega cuando el
   * cliente cancela la operacion de compra, desde la pagina de confirmacion.
   * El resultado de ejecutar esta accion, es que se borra toda informacion de pago
   * que se hubiera validado ya, y el estatus de la orden se actualiza a 'ANULADO'.
   */   
  public function executeAnularpago(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
      
    $this->getUser()->getAttribute($this->getUser()->getUsername() . 'carrito')->borrarPagos();
    $this->forward('carrito','contenido');
  }

  /**
   * Se efectua el cobro de los productos que se encuentran en el carrito.
   * Si no se hubiere corroborado antes que el pago es posible, lanza una 
   * excepcion.
   */
  public function executeEfectuarcobro(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
      
    $nom = $this->getUser()->getUsername();
    if($this->getUser()->hasAttribute($nom . 'carrito') 
        && $this->getUser()->getAttribute($nom. 'carrito')->getPago()->exists())
    {
      $cliente = $this->getUser()->getCliente();
      $carrito = $this->getUser()->getAttribute($nom. 'carrito');
      $pago = $carrito->getPago();
      try{
        //Doctrine_Core::getTable('Pago')->efectuarCobro($pago, $cliente, $cliente->getOrdenes());
        //if( !$request->getAttribute('recurrente'))
          ProcesamPagos::efectuarCobro($pago, $cliente, $carrito->getPaquetes());  
        //else
        //  ProcesamPagos::efectuarCobroRecurrente($pago, $cliente, $carrito->getOrdenes());
      }catch(Exception $e){
        throw $e;

        //TODO: ir a pagina de anuncio de fallo de cobro, exponiendo razones
      }

      //$this->getUser()->getAttribute($this->getUser()->getUsername() . 'carrito')->vaciar();
      $this->forward('carrito','comprobacion');
    }
  }

  /**
   * Esta accion se ejecuta cuando el cliente ya ha confirmado 
   * y ademas ya se ha consumado el cobro.
   * 
   */
  public function executeComprobacion(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */ 
      
    $username = $this->getUser()->getUsername();
    $this->pago = $this->getUser()->getAttribute($username . 'carrito')->getPago();
    //if($this->pago === null) throw new sfException('es null la vaina');
    $this->paquetes = $this->getUser()->getAttribute($username . 'carrito')->getPaquetes();
    $this->getUser()->getAttribute($username . 'carrito')->vaciar();
  }

  /*
   * Se cobran los productos del carrito segun la informacion de pagos, 
   * ,conjuntamente se colocan las ordenes de entrega en cola 
   * para ser despachadas, y el usuario se transforma en cliente en caso de no serlo.
   */
  public function executeOrdenar(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
      
    $paquetes = $this->getUser()->getAttribute($this->getUser()->getUsername() . 'carrito')->getPaquetes();
    $pago = $this->getUser()->getAttribute($this->getUser()->getUsername() . 'carrito')->getPago();
    Doctrine_Core::getTable('Pago')->cobrar($pago, $this->getUser(), $paquetes);

    //TODO: refactoring del codigo de cobro; este deberia estar en PagoForm y aprovechar "polimorfismo"
    //TODO: otra opcion podria ser Gateway::solicitar($pago);
  }

  /*
   * Se envia por email una cotizacion de producto.
   */
  public function executeEmail(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */
      
    $params = $request->getParameterHolder()->getAll();
    $cotizacion = new Cotizacion($params['producto'],$this->getReglas($request),$params['frecuencia']);
    $message = new MailCotizacion($cotizacion,$params['producto']);
    $message->setTo($params['envio']['to']); //->setComentario($params['envio']['comentario']);

    $this->getMailer()->send($message);
  }

  /*
   * Se muestran en detalle todos los articulos del carrito,
   * asi como la solicitud de los datos de la forma de pago 
   * (i.e. tarjeta de credito), como paso previo al checkout.
   * Para ir a esta accion, el usuario debe haber hecho 
   * login (ver archivo security.yml en el contexto del mismo modulo)
   *
  public function executeCashier(sfWebRequest $request)
  {
    //los productos que estan en el carrito
    $nom = $this->getUser()->getUsername();
    if($this->getUser()->hasAttribute($nom . 'carrito'))
      $this->paquetes = $this->getUser()->getAttribute($nom . 'carrito')->getPaquetes();
    else
      $this->forward404('No existen productos que haya agregado al carrito'); 

    $this->formpago = new PagoTCForm();
  }
  */

  /*
   * Solicitud de confirmacion del pago.
   *
   */
  public function executeConfirmarpago(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */  
      
    $nom = $this->getUser()->getUsername();
    if($this->getUser()->hasAttribute($nom . 'carrito'))
      $this->paquetes = $this->getUser()->getAttribute($nom . 'carrito')->getPaquetes();
    else
     $this->forward404('operacion invalida'); 

    $params = $request->getParameterHolder()->getAll();
    $class = ucfirst(strtolower($params['pago']['type'])); //todo: verificar que esto funcione

    $pago = new Pago();
    //$this->procesarPago($pago);

    $pago->bind($request->getParameter($pago->getName()), $request->getFiles($pago->getName()));    
    $this->getUser()->getAttribute($nom . 'carrito')->setPago($pago);

    $params = $request->getParameterHolder()->getAll();

    $this->numtarjeta = $params['envio']['Nro. de Tarjeta'];
    $this->nombrecliente = $params['envio']['nombre'] . ' ' . $params['envio']['apellido'];
    $this->pago = $this->getUser()->getAttribute($nom . 'carrito')->getPrecioTotal();
    //$this->pago2 = $this->getUser()->getAttribute($nom . 'carrito')->getPrecio2();

    //$this->userid = $this->getUser()->getAttribute('user_id', null, 'sfGuardSecurityUser');

  }



  /*
   * El usuario ha confirmado el pago de los servicios, por lo que
   *  se transforma en un nuevo cliente con acceso a los servicios
   *  que ha contratado.
   */
  public function executeSubscripconfirmado(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */ 
      
    $nom = $this->getUser()->getUsername();

    //se vacia el carrito
    $this->productos = $this->getUser()->getAttributeHolder()->remove($nom . 'carrito', null);

    chdir(sfConfig::get('sf_root_dir'));
    $task = new nuevoClienteTask($this->dispatcher, new sfFormatter());
    $user = $this->getUser()->getGuardUser();
    $nombrepais = sfConfig::get('app_myaltarget_default_country');
    $pais = Doctrine_Core::getTable('TbcPais')->getPaisPorNombre($nombrepais);
    $email = $user->getEmailAddress();
    //En argumentos que pueden ser varias palabras coloco comillas para evitar error de parsing
    $argumentos = array(
      'email_address' => $email, 
      'username'      => $user->getUsername(),
      'password'      => $user->getPassword(),
      'first_name'    => '\'' . $user->getFirstName() . '\'',
      'last_name'     => '\'' . $user->getLastName() . '\'',
      'country'       => '\'' . $nombrepais . '\'',
      'status'        => 'Activo'
    );

    $opciones = array(
      
    );

    $task->run($argumentos, $opciones);

    //vincula al usuario con el cliente y con el servidor donde se almacenara su info
    $cliente = Doctrine_Core::getTable('TbsCliente')->getClienteByEmail($email);
    $clientid = $cliente->getCliCodigo();
    $user->setCodigoCliente($clientid);
    $user->setServidorAlmacena($cliente->getFkCliCodseal());
    $user->save();
  }

  /*
   * Elimina ("saca") un producto del carrito.
   */
  public function executeRemove(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */  
      
    if( !$this->getUser()->hasAttribute($this->getUser()->getUsername() . 'carrito') ) 
      throw new sfException('No existe el carrito de compras');
    $params = $request->getParameterHolder()->getAll();
    $this->getUser()->getAttribute($this->getUser()->getUsername() . 'carrito')->removePaquete($params['producto']);
    $this->setTemplate('contenido');
  }

  /*
   *
   */
  public function executeActivar(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */ 
      
//    $confirm = $params['confirm'];
/*
    $q = Doctrine_Query::create()
       ->select('a.clave, a.usuario_id')
       ->from('Activacion a')
       ->where('a.usuario_id = ?',$usuario);
       //->andWhere('a.clave = ?',$confirm);
    $resultactiv = $q->execute();
*/
    $this->forward404Unless($usuario = Doctrine_Core::getTable('SfGuardUser')->find(array($request->getParameter('id'))), sprintf('Object sfGuardUser does not exist (%s).', $request->getParameter('id')));

    if( 0 != strcmp($usuario->getActivacion()->getClave(), $request->getParameter('confirm')) )
      $this->forward404('operacion invalida');

    $usuario->setIsActive(true);
    $usuario->save();

  }

  /*
   * Devuelve las reglas que se hayan en la solicitud.
   * Lanza una excepcion en caso de que no existan reglas 
   * en la solicitud.
   */
  protected function getReglas(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */  
      
    $params = $request->getParameterHolder()->getAll();
    $result = array();
    foreach($params as $key => $value)
    {
      if( (FALSE != strstr($key, 'regla_')) && (0 != strcmp($value,'')) )
        array_push($result,$value);
    }
    return $result;
  }

  protected function getReglas2(sfWebRequest $request)
  {
    //Esto ya no lo uso, porque quiero que se muestre activa la pestaña de productos  
    /*para informar al layout de la posicion en el sitio
    $atts = $this->getUser()->getAttributeHolder()->remove("tab_actual");
    $this->getUser()->setAttribute("tab_actual", "carrito");
    */  
      
    $params = $request->getParameterHolder()->getAll();
    $result = array();
    foreach($params['pricing'] as $key => $value)
    {
      if( (FALSE != strstr($key, 'regla_')) && (0 != strcmp($value,'')) )
        array_push($result,$value);
    }
    return $result;
  }

  /*
   * Devuelve un arreglo de parametros que se encuentra en la solicitud
   */
  protected function getParams(sfWebRequest $request)
  {
    
  }

  /*
   * Procesa el formulario que recibe de una consulta de presupuesto,
   * para luego mostrar el presupuesto al cliente.
   * Se verifica que el formulario sea valido y se verifica que la seleccion
   * del cliente ya corresponda a una afiliacion existente del mismo usuario, caso
   * en el que se le muestra una advertencia al usuario.
   */
  protected function processForm(sfWebRequest $request, PricingRequestForm $pform)
  {
    $params = $request->getParameterHolder()->getAll();
    //se rellena el formulario de cotizacion
    $pform->bind($request->getParameter($pform->getName()), $request->getFiles($pform->getName()));
    if ($pform->isValid())
      $this->cotizacion = new Cotizacion($params['pricing']['producto'], 
                                $this->getReglas2($request),$params['pricing']['frecuencia']);

    //si la cotizacion es de producto ya afiliado se muestra advertencia
    //$cliente = $this->usuario->getGuardUser()->Cliente;
    //if($cliente->exists() && 
    //   Doctrine_Core::getTable('Afiliacion')->tieneAfiliacion($cliente,$params['pricing']['producto']) )
    //{
      //TODO: le pongo un warning a la cotizacion
    //}
  }

  /**
   * Procesa los datos de pago recibidos.
   *
   */
  protected function procesarPago(sfWebRequest $request, PagoForm $pform)
  {
/*
    $clase = $pform->getName() . 'PagoForm';
    if(class_exists($clase)) 
    $pform->bind($request->getParameter($pform->getName()), $request->getFiles($pform->getName()));
    
*/
  }

}
